package co.edu.usbcali.modelo.control;

import co.edu.usbcali.dataaccess.daoFactory.JPADaoFactory;
import co.edu.usbcali.dataaccess.entityManager.EntityManagerHelper;
import co.edu.usbcali.exceptions.*;
import co.edu.usbcali.modelo.*;
import co.edu.usbcali.utilities.Utilities;

import java.math.BigDecimal;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;

/**
 * interface PreinscripcionLogic
 * 
 * @author Zathura Code Generator http://code.google.com/p/zathura
 * 
 */
public class PreinscripcionLogic implements IPreinscripcionLogic {
	public List<Preinscripcion> getPreinscripcion() throws Exception {
		List<Preinscripcion> list = new ArrayList<Preinscripcion>();

		try {
			list = JPADaoFactory.getInstance().getPreinscripcionDAO()
					.findAll(0);
		} catch (Exception e) {
			throw new ZMessManager().new GettingException(ZMessManager.ALL
					+ "Preinscripcion");
		} finally {
		}

		return list;
	}

	public void savePreinscripcion(String cargoPre, String cargoTutorPre,
			String celularTutorPre, String descripcionPre, Long estadoPre,
			Date fechaFinalPre, Date fechaInicioPre, Date fechaPre,
			String laboraPre, String laboresPre, String lugarLaboraPre,
			String nombreTutorPre, String objetivoPre, String telefonoTutorPre,
			String temasPre, Long codigoArea_AreaDesempeno,
			Long codigoEmp_Empresa, Long codPra_Practicante) throws Exception {
		Preinscripcion entity = null;

		try {
			if (cargoPre == null) {
				throw new ZMessManager().new EmptyFieldException("cargoPre");
			}

			if ((cargoPre != null)
					&& (Utilities.checkWordAndCheckWithlength(cargoPre, 30) == false)) {
				throw new ZMessManager().new NotValidFormatException("cargoPre");
			}

			if (cargoTutorPre == null) {
				throw new ZMessManager().new EmptyFieldException(
						"cargoTutorPre");
			}

			if ((cargoTutorPre != null)
					&& (Utilities
							.checkWordAndCheckWithlength(cargoTutorPre, 30) == false)) {
				throw new ZMessManager().new NotValidFormatException(
						"cargoTutorPre");
			}

			if ((celularTutorPre != null)
					&& (Utilities.checkWordAndCheckWithlength(celularTutorPre,
							30) == false)) {
				throw new ZMessManager().new NotValidFormatException(
						"celularTutorPre");
			}

			if (descripcionPre == null) {
				throw new ZMessManager().new EmptyFieldException(
						"descripcionPre");
			}

			if ((descripcionPre != null)
					&& (Utilities.checkWordAndCheckWithlength(descripcionPre,
							255) == false)) {
				throw new ZMessManager().new NotValidFormatException(
						"descripcionPre");
			}

			if (estadoPre == null) {
				throw new ZMessManager().new EmptyFieldException("estadoPre");
			}

			if ((estadoPre != null)
					&& (Utilities.checkNumberAndCheckWithPrecisionAndScale(""
							+ estadoPre, 1, 0) == false)) {
				throw new ZMessManager().new NotValidFormatException(
						"estadoPre");
			}

			if (fechaFinalPre == null) {
				throw new ZMessManager().new EmptyFieldException(
						"fechaFinalPre");
			}

			if (fechaInicioPre == null) {
				throw new ZMessManager().new EmptyFieldException(
						"fechaInicioPre");
			}

			if (fechaPre == null) {
				throw new ZMessManager().new EmptyFieldException("fechaPre");
			}

			if (laboraPre == null) {
				throw new ZMessManager().new EmptyFieldException("laboraPre");
			}

			if ((laboraPre != null)
					&& (Utilities.checkWordAndCheckWithlength(laboraPre, 2) == false)) {
				throw new ZMessManager().new NotValidFormatException(
						"laboraPre");
			}

			if (laboresPre == null) {
				throw new ZMessManager().new EmptyFieldException("laboresPre");
			}

			if ((laboresPre != null)
					&& (Utilities.checkWordAndCheckWithlength(laboresPre, 255) == false)) {
				throw new ZMessManager().new NotValidFormatException(
						"laboresPre");
			}

			if ((lugarLaboraPre != null)
					&& (Utilities.checkWordAndCheckWithlength(lugarLaboraPre,
							30) == false)) {
				throw new ZMessManager().new NotValidFormatException(
						"lugarLaboraPre");
			}

			if (nombreTutorPre == null) {
				throw new ZMessManager().new EmptyFieldException(
						"nombreTutorPre");
			}

			if ((nombreTutorPre != null)
					&& (Utilities.checkWordAndCheckWithlength(nombreTutorPre,
							30) == false)) {
				throw new ZMessManager().new NotValidFormatException(
						"nombreTutorPre");
			}

			if (objetivoPre == null) {
				throw new ZMessManager().new EmptyFieldException("objetivoPre");
			}

			if ((objetivoPre != null)
					&& (Utilities.checkWordAndCheckWithlength(objetivoPre, 255) == false)) {
				throw new ZMessManager().new NotValidFormatException(
						"objetivoPre");
			}

			if (telefonoTutorPre == null) {
				throw new ZMessManager().new EmptyFieldException(
						"telefonoTutorPre");
			}

			if ((telefonoTutorPre != null)
					&& (Utilities.checkWordAndCheckWithlength(telefonoTutorPre,
							30) == false)) {
				throw new ZMessManager().new NotValidFormatException(
						"telefonoTutorPre");
			}

			if (temasPre == null) {
				throw new ZMessManager().new EmptyFieldException("temasPre");
			}

			if ((temasPre != null)
					&& (Utilities.checkWordAndCheckWithlength(temasPre, 255) == false)) {
				throw new ZMessManager().new NotValidFormatException("temasPre");
			}

			if (codigoArea_AreaDesempeno == null) {
				throw new ZMessManager().new EmptyFieldException(
						"codigoArea_AreaDesempeno");
			}

			if ((codigoArea_AreaDesempeno != null)
					&& (Utilities.checkNumberAndCheckWithPrecisionAndScale(""
							+ codigoArea_AreaDesempeno, 5, 0) == false)) {
				throw new ZMessManager().new NotValidFormatException(
						"codigoArea_AreaDesempeno");
			}

			if (codigoEmp_Empresa == null) {
				throw new ZMessManager().new EmptyFieldException(
						"codigoEmp_Empresa");
			}

			if ((codigoEmp_Empresa != null)
					&& (Utilities.checkNumberAndCheckWithPrecisionAndScale(""
							+ codigoEmp_Empresa, 15, 0) == false)) {
				throw new ZMessManager().new NotValidFormatException(
						"codigoEmp_Empresa");
			}

			if (codPra_Practicante == null) {
				throw new ZMessManager().new EmptyFieldException(
						"codPra_Practicante");
			}

			if ((codPra_Practicante != null)
					&& (Utilities.checkNumberAndCheckWithPrecisionAndScale(""
							+ codPra_Practicante, 15, 0) == false)) {
				throw new ZMessManager().new NotValidFormatException(
						"codPra_Practicante");
			}

			IAreaDesempenoLogic logicAreaDesempeno1 = new AreaDesempenoLogic();
			IEmpresaLogic logicEmpresa2 = new EmpresaLogic();
			IPracticanteLogic logicPracticante3 = new PracticanteLogic();
			AreaDesempeno areaDesempenoClass = logicAreaDesempeno1
					.getAreaDesempeno(codigoArea_AreaDesempeno);
			Empresa empresaClass = logicEmpresa2.getEmpresa(codigoEmp_Empresa);
			Practicante practicanteClass = logicPracticante3
					.getPracticante(codPra_Practicante);

			if (areaDesempenoClass == null) {
				throw new ZMessManager().new ForeignException("areaDesempeno");
			}

			if (empresaClass == null) {
				throw new ZMessManager().new ForeignException("empresa");
			}

			if (practicanteClass == null) {
				throw new ZMessManager().new ForeignException("practicante");
			}

			entity = getPreinscripcion(codPra_Practicante);

			if (entity != null) {
				throw new ZMessManager(ZMessManager.ENTITY_WITHSAMEKEY);
			}

			entity = new Preinscripcion();
			entity.setCargoPre(cargoPre);
			entity.setCargoTutorPre(cargoTutorPre);
			entity.setCelularTutorPre(celularTutorPre);
			entity.setDescripcionPre(descripcionPre);
			entity.setEstadoPre(estadoPre);
			entity.setFechaFinalPre(fechaFinalPre);
			entity.setFechaInicioPre(fechaInicioPre);
			entity.setFechaPre(fechaPre);
			entity.setLaboraPre(laboraPre);
			entity.setLaboresPre(laboresPre);
			entity.setLugarLaboraPre(lugarLaboraPre);
			entity.setNombreTutorPre(nombreTutorPre);
			entity.setObjetivoPre(objetivoPre);
			entity.setTelefonoTutorPre(telefonoTutorPre);
			entity.setTemasPre(temasPre);
			entity.setAreaDesempeno(areaDesempenoClass);
			entity.setEmpresa(empresaClass);
			entity.setPracticante(practicanteClass);
			EntityManagerHelper.beginTransaction();
			JPADaoFactory.getInstance().getPreinscripcionDAO().save(entity);
			EntityManagerHelper.commit();
		} catch (Exception e) {
			EntityManagerHelper.rollback();
			throw e;
		} finally {
			EntityManagerHelper.closeEntityManager();
		}
	}

	public void deletePreinscripcion(Long codPra) throws Exception {
		Preinscripcion entity = null;

		if (codPra == null) {
			throw new ZMessManager().new EmptyFieldException(
					"practicante.codPra");
		}

		entity = getPreinscripcion(codPra);

		if (entity == null) {
			throw new ZMessManager().new EmptyFieldException("Preinscripcion");
		}

		try {
			EntityManagerHelper.beginTransaction();
			JPADaoFactory.getInstance().getPreinscripcionDAO().delete(entity);
			EntityManagerHelper.commit();
		} catch (Exception e) {
			EntityManagerHelper.rollback();
			throw e;
		} finally {
			EntityManagerHelper.closeEntityManager();
		}
	}

	public void updatePreinscripcion(Long estadoPre, Long codPra_Practicante)
			throws Exception {
		Preinscripcion entity = null;

		if (estadoPre == null) {
			throw new ZMessManager().new EmptyFieldException("estadoPre");
		}
		if (codPra_Practicante == null) {
			throw new ZMessManager().new EmptyFieldException(
					"codPra_Practicante");
		}

		if ((codPra_Practicante != null)
				&& (Utilities.checkNumberAndCheckWithPrecisionAndScale(""
						+ codPra_Practicante, 15, 0) == false)) {
			throw new ZMessManager().new NotValidFormatException(
					"codPra_Practicante");
		}
		entity = getPreinscripcion(codPra_Practicante);
		if (entity == null) {
			throw new ZMessManager().new EmptyFieldException("Preinscripcion");
		}
		try {
			EntityManagerHelper.beginTransaction();
			entity.setEstadoPre(estadoPre);
			JPADaoFactory.getInstance().getPreinscripcionDAO().update(entity);
			EntityManagerHelper.commit();
		} catch (Exception e) {
			EntityManagerHelper.rollback();
			throw e;
		} finally {
			EntityManagerHelper.closeEntityManager();
		}
	}

	public void updatePreinscripcion(String cargoPre, String cargoTutorPre,
			String celularTutorPre, String descripcionPre, Long estadoPre,
			Date fechaFinalPre, Date fechaInicioPre, Date fechaPre,
			String laboraPre, String laboresPre, String lugarLaboraPre,
			String nombreTutorPre, String objetivoPre, String telefonoTutorPre,
			String temasPre, Long codigoArea_AreaDesempeno,
			Long codigoEmp_Empresa, Long codPra_Practicante) throws Exception {
		Preinscripcion entity = null;

		try {
			if (cargoPre == null) {
				throw new ZMessManager().new EmptyFieldException("cargoPre");
			}

			if ((cargoPre != null)
					&& (Utilities.checkWordAndCheckWithlength(cargoPre, 30) == false)) {
				throw new ZMessManager().new NotValidFormatException("cargoPre");
			}

			if (cargoTutorPre == null) {
				throw new ZMessManager().new EmptyFieldException(
						"cargoTutorPre");
			}

			if ((cargoTutorPre != null)
					&& (Utilities
							.checkWordAndCheckWithlength(cargoTutorPre, 30) == false)) {
				throw new ZMessManager().new NotValidFormatException(
						"cargoTutorPre");
			}

			if ((celularTutorPre != null)
					&& (Utilities.checkWordAndCheckWithlength(celularTutorPre,
							30) == false)) {
				throw new ZMessManager().new NotValidFormatException(
						"celularTutorPre");
			}

			if (descripcionPre == null) {
				throw new ZMessManager().new EmptyFieldException(
						"descripcionPre");
			}

			if ((descripcionPre != null)
					&& (Utilities.checkWordAndCheckWithlength(descripcionPre,
							255) == false)) {
				throw new ZMessManager().new NotValidFormatException(
						"descripcionPre");
			}

			if (estadoPre == null) {
				throw new ZMessManager().new EmptyFieldException("estadoPre");
			}

			if ((estadoPre != null)
					&& (Utilities.checkNumberAndCheckWithPrecisionAndScale(""
							+ estadoPre, 1, 0) == false)) {
				throw new ZMessManager().new NotValidFormatException(
						"estadoPre");
			}

			if (fechaFinalPre == null) {
				throw new ZMessManager().new EmptyFieldException(
						"fechaFinalPre");
			}

			if (fechaInicioPre == null) {
				throw new ZMessManager().new EmptyFieldException(
						"fechaInicioPre");
			}

			if (fechaPre == null) {
				throw new ZMessManager().new EmptyFieldException("fechaPre");
			}

			if (laboraPre == null) {
				throw new ZMessManager().new EmptyFieldException("laboraPre");
			}

			if ((laboraPre != null)
					&& (Utilities.checkWordAndCheckWithlength(laboraPre, 2) == false)) {
				throw new ZMessManager().new NotValidFormatException(
						"laboraPre");
			}

			if (laboresPre == null) {
				throw new ZMessManager().new EmptyFieldException("laboresPre");
			}

			if ((laboresPre != null)
					&& (Utilities.checkWordAndCheckWithlength(laboresPre, 255) == false)) {
				throw new ZMessManager().new NotValidFormatException(
						"laboresPre");
			}

			if ((lugarLaboraPre != null)
					&& (Utilities.checkWordAndCheckWithlength(lugarLaboraPre,
							30) == false)) {
				throw new ZMessManager().new NotValidFormatException(
						"lugarLaboraPre");
			}

			if (nombreTutorPre == null) {
				throw new ZMessManager().new EmptyFieldException(
						"nombreTutorPre");
			}

			if ((nombreTutorPre != null)
					&& (Utilities.checkWordAndCheckWithlength(nombreTutorPre,
							30) == false)) {
				throw new ZMessManager().new NotValidFormatException(
						"nombreTutorPre");
			}

			if (objetivoPre == null) {
				throw new ZMessManager().new EmptyFieldException("objetivoPre");
			}

			if ((objetivoPre != null)
					&& (Utilities.checkWordAndCheckWithlength(objetivoPre, 255) == false)) {
				throw new ZMessManager().new NotValidFormatException(
						"objetivoPre");
			}

			if (telefonoTutorPre == null) {
				throw new ZMessManager().new EmptyFieldException(
						"telefonoTutorPre");
			}

			if ((telefonoTutorPre != null)
					&& (Utilities.checkWordAndCheckWithlength(telefonoTutorPre,
							30) == false)) {
				throw new ZMessManager().new NotValidFormatException(
						"telefonoTutorPre");
			}

			if (temasPre == null) {
				throw new ZMessManager().new EmptyFieldException("temasPre");
			}

			if ((temasPre != null)
					&& (Utilities.checkWordAndCheckWithlength(temasPre, 255) == false)) {
				throw new ZMessManager().new NotValidFormatException("temasPre");
			}

			if (codigoArea_AreaDesempeno == null) {
				throw new ZMessManager().new EmptyFieldException(
						"codigoArea_AreaDesempeno");
			}

			if ((codigoArea_AreaDesempeno != null)
					&& (Utilities.checkNumberAndCheckWithPrecisionAndScale(""
							+ codigoArea_AreaDesempeno, 5, 0) == false)) {
				throw new ZMessManager().new NotValidFormatException(
						"codigoArea_AreaDesempeno");
			}

			if (codigoEmp_Empresa == null) {
				throw new ZMessManager().new EmptyFieldException(
						"codigoEmp_Empresa");
			}

			if ((codigoEmp_Empresa != null)
					&& (Utilities.checkNumberAndCheckWithPrecisionAndScale(""
							+ codigoEmp_Empresa, 15, 0) == false)) {
				throw new ZMessManager().new NotValidFormatException(
						"codigoEmp_Empresa");
			}

			if (codPra_Practicante == null) {
				throw new ZMessManager().new EmptyFieldException(
						"codPra_Practicante");
			}

			if ((codPra_Practicante != null)
					&& (Utilities.checkNumberAndCheckWithPrecisionAndScale(""
							+ codPra_Practicante, 15, 0) == false)) {
				throw new ZMessManager().new NotValidFormatException(
						"codPra_Practicante");
			}

			IAreaDesempenoLogic logicAreaDesempeno1 = new AreaDesempenoLogic();

			IEmpresaLogic logicEmpresa2 = new EmpresaLogic();

			IPracticanteLogic logicPracticante3 = new PracticanteLogic();
			AreaDesempeno areaDesempenoClass = logicAreaDesempeno1
					.getAreaDesempeno(codigoArea_AreaDesempeno);
			Empresa empresaClass = logicEmpresa2.getEmpresa(codigoEmp_Empresa);
			Practicante practicanteClass = logicPracticante3
					.getPracticante(codPra_Practicante);

			if (areaDesempenoClass == null) {
				throw new ZMessManager().new ForeignException("areaDesempeno");
			}

			if (empresaClass == null) {
				throw new ZMessManager().new ForeignException("empresa");
			}

			if (practicanteClass == null) {
				throw new ZMessManager().new ForeignException("practicante");
			}

			entity = getPreinscripcion(codPra_Practicante);

			if (entity == null) {
				throw new ZMessManager(ZMessManager.ENTITY_NOENTITYTOUPDATE);
			}

			entity.setCargoPre(cargoPre);
			entity.setCargoTutorPre(cargoTutorPre);
			entity.setCelularTutorPre(celularTutorPre);
			entity.setDescripcionPre(descripcionPre);
			entity.setEstadoPre(estadoPre);
			entity.setFechaFinalPre(fechaFinalPre);
			entity.setFechaInicioPre(fechaInicioPre);
			entity.setFechaPre(fechaPre);
			entity.setLaboraPre(laboraPre);
			entity.setLaboresPre(laboresPre);
			entity.setLugarLaboraPre(lugarLaboraPre);
			entity.setNombreTutorPre(nombreTutorPre);
			entity.setObjetivoPre(objetivoPre);
			entity.setTelefonoTutorPre(telefonoTutorPre);
			entity.setTemasPre(temasPre);
			entity.setAreaDesempeno(areaDesempenoClass);
			entity.setEmpresa(empresaClass);
			entity.setPracticante(practicanteClass);
			EntityManagerHelper.beginTransaction();
			JPADaoFactory.getInstance().getPreinscripcionDAO().update(entity);
			EntityManagerHelper.commit();
		} catch (Exception e) {
			EntityManagerHelper.rollback();
			throw e;
		} finally {
			EntityManagerHelper.closeEntityManager();
		}
	}

	public Preinscripcion getPreinscripcion(Long codPra) throws Exception {
		List<Preinscripcion> entity = null;

		try {

			entity = JPADaoFactory.getInstance().getPreinscripcionDAO()
					.findByProperty("practicante.codPra", codPra);
		} catch (Exception e) {
			throw new ZMessManager().new FindingException("Preinscripcion");
		} finally {
		}
		System.out.println(entity.size());
		if (entity.size() > 0) {
			return entity.get(0);
		} else {
			return null;
		}

	}

	public List<Preinscripcion> findPagePreinscripcion(String sortColumnName,
			boolean sortAscending, int startRow, int maxResults)
			throws Exception {
		List<Preinscripcion> entity = null;

		try {
			entity = JPADaoFactory.getInstance().getPreinscripcionDAO()
					.findPagePreinscripcion(sortColumnName, sortAscending,
							startRow, maxResults);
		} catch (Exception e) {
			throw new ZMessManager().new FindingException("Preinscripcion");
		}

		return entity;
	}

	public Long findTotalNumberPreinscripcion() throws Exception {
		Long entity = null;

		try {
			entity = JPADaoFactory.getInstance().getPreinscripcionDAO()
					.findTotalNumberPreinscripcion();
		} catch (Exception e) {
			throw new ZMessManager().new FindingException(
					"Preinscripcion Count");
		} finally {
		}

		return entity;
	}

	/**
	 * 
	 * @param varibles
	 *            este arreglo debera tener:
	 * 
	 *            [0] = String variable = (String) varibles[i]; representa como
	 *            se llama la variable en el pojo
	 * 
	 *            [1] = Boolean booVariable = (Boolean) varibles[i + 1];
	 *            representa si el valor necesita o no ''(comillas simples)usado
	 *            para campos de tipo string
	 * 
	 *            [2] = Object value = varibles[i + 2]; representa el valor que
	 *            se va a buscar en la BD
	 * 
	 *            [3] = String comparator = (String) varibles[i + 3]; representa
	 *            que tipo de busqueda voy a hacer.., ejemplo: where
	 *            nombre=william o where nombre<>william, en este campo iria el
	 *            tipo de comparador que quiero si es = o <>
	 * 
	 *            Se itera de 4 en 4..., entonces 4 registros del arreglo
	 *            representan 1 busqueda en un campo, si se ponen mas pues el
	 *            continuara buscando en lo que se le ingresen en los otros 4
	 * 
	 * 
	 * @param variablesBetween
	 * 
	 *            la diferencia son estas dos posiciones
	 * 
	 *            [0] = String variable = (String) varibles[j]; la variable ne
	 *            la BD que va a ser buscada en un rango
	 * 
	 *            [1] = Object value = varibles[j + 1]; valor 1 para buscar en
	 *            un rango
	 * 
	 *            [2] = Object value2 = varibles[j + 2]; valor 2 para buscar en
	 *            un rango ejempolo: a > 1 and a < 5 --> 1 seria value y 5 seria
	 *            value2
	 * 
	 *            [3] = String comparator1 = (String) varibles[j + 3];
	 *            comparador 1 ejemplo: a comparator1 1 and a < 5
	 * 
	 *            [4] = String comparator2 = (String) varibles[j + 4];
	 *            comparador 2 ejemplo: a comparador1>1 and a comparador2<5 (el
	 *            original: a > 1 and a < 5) *
	 * @param variablesBetweenDates
	 *            (en este caso solo para mysql) [0] = String variable =
	 *            (String) varibles[k]; el nombre de la variable que hace
	 *            referencia a una fecha
	 * 
	 *            [1] = Object object1 = varibles[k + 2]; fecha 1 a
	 *            comparar(deben ser dates)
	 * 
	 *            [2] = Object object2 = varibles[k + 3]; fecha 2 a
	 *            comparar(deben ser dates)
	 * 
	 *            esto hace un between entre las dos fechas.
	 * 
	 * @return lista con los objetos que se necesiten
	 * @throws Exception
	 */
	public List<Preinscripcion> findByCriteria(Object[] variables,
			Object[] variablesBetween, Object[] variablesBetweenDates)
			throws Exception {
		List<Preinscripcion> list = new ArrayList<Preinscripcion>();
		String where = new String();
		String tempWhere = new String();

		if (variables != null) {
			for (int i = 0; i < variables.length; i++) {
				if ((variables[i] != null) && (variables[i + 1] != null)
						&& (variables[i + 2] != null)
						&& (variables[i + 3] != null)) {
					String variable = (String) variables[i];
					Boolean booVariable = (Boolean) variables[i + 1];
					Object value = variables[i + 2];
					String comparator = (String) variables[i + 3];

					if (booVariable.booleanValue()) {
						tempWhere = (tempWhere.length() == 0) ? ("(model."
								+ variable + " " + comparator + " \'" + value + "\' )")
								: (tempWhere + " AND (model." + variable + " "
										+ comparator + " \'" + value + "\' )");
					} else {
						tempWhere = (tempWhere.length() == 0) ? ("(model."
								+ variable + " " + comparator + " " + value + " )")
								: (tempWhere + " AND (model." + variable + " "
										+ comparator + " " + value + " )");
					}
				}

				i = i + 3;
			}
		}

		if (variablesBetween != null) {
			for (int j = 0; j < variablesBetween.length; j++) {
				if ((variablesBetween[j] != null)
						&& (variablesBetween[j + 1] != null)
						&& (variablesBetween[j + 2] != null)
						&& (variablesBetween[j + 3] != null)
						&& (variablesBetween[j + 4] != null)) {
					String variable = (String) variablesBetween[j];
					Object value = variablesBetween[j + 1];
					Object value2 = variablesBetween[j + 2];
					String comparator1 = (String) variablesBetween[j + 3];
					String comparator2 = (String) variablesBetween[j + 4];
					tempWhere = (tempWhere.length() == 0) ? ("(" + value + " "
							+ comparator1 + " " + variable + " and " + variable
							+ " " + comparator2 + " " + value2 + " )")
							: (tempWhere + " AND (" + value + " " + comparator1
									+ " " + variable + " and " + variable + " "
									+ comparator2 + " " + value2 + " )");
				}

				j = j + 4;
			}
		}

		if (variablesBetweenDates != null) {
			for (int k = 0; k < variablesBetweenDates.length; k++) {
				if ((variablesBetweenDates[k] != null)
						&& (variablesBetweenDates[k + 1] != null)
						&& (variablesBetweenDates[k + 2] != null)) {
					String variable = (String) variablesBetweenDates[k];
					Object object1 = variablesBetweenDates[k + 1];
					Object object2 = variablesBetweenDates[k + 2];
					String value = null;
					String value2 = null;

					try {
						Date date1 = (Date) object1;
						Date date2 = (Date) object2;
						value = Utilities
								.formatDateWithoutTimeInAStringForBetweenWhere(date1);
						value2 = Utilities
								.formatDateWithoutTimeInAStringForBetweenWhere(date2);
					} catch (Exception e) {
						list = null;
						throw e;
					}

					tempWhere = (tempWhere.length() == 0) ? ("(model."
							+ variable + " between \'" + value + "\' and \'"
							+ value2 + "\')") : (tempWhere + " AND (model."
							+ variable + " between \'" + value + "\' and \'"
							+ value2 + "\')");
				}

				k = k + 2;
			}
		}

		if (tempWhere.length() == 0) {
			where = null;
		} else {
			where = "(" + tempWhere + ")";
		}

		try {
			list = JPADaoFactory.getInstance().getPreinscripcionDAO()
					.findByCriteria(where);
		} catch (Exception e) {
			throw new Exception(e.getMessage());
		} finally {
		}

		return list;
	}

}
